#include <ds/semaphore.h>
#include <sys/unistd.h>

void sem_init(sem_t* sem, u32 init) {
    sem->count = ATOMIC_VAR_INIT(init);
}

void sem_wait(sem_t* sem) {
    while (!atomic_load(&sem->count)) {
        yield();
    }
    atomic_fetch_sub(&sem->count, 1);
}

void sem_post(sem_t* sem) {
    atomic_fetch_add(&sem->count, 1);
}